package interfaceTexto;

import logica.FachadaLogica;
import logica.exceptions.CategoryDoesNotExistException;
import logica.exceptions.UserNotAuthenticatedException;

public class MenuUser extends AbstractReader {
	static final String lineSeparator = System.getProperty("line.separator");

	static final String menuUserString = lineSeparator + ". Atualizar Dados(a)"
			+ lineSeparator + ". Cadastrar Produtos(cad)" + lineSeparator
			+ ". Visualizar Produtos(v)" + lineSeparator
			+ ". Excluir Produtos(e)" + lineSeparator + ". Leiloes(l)"
			+ lineSeparator + ". Pesquisar Produtos(p)" + lineSeparator
			+ ". Deslogar(d)";

	static final String menuUserStringAdmin = lineSeparator
			+ ". Atualizar Dados(a)" + lineSeparator + ". Categorias(cat)"
			+ lineSeparator + ". Cadastrar Produtos(cad)" + lineSeparator
			+ ". Visualizar Produtos(v)" + lineSeparator
			+ ". Excluir Produtos(e)" + lineSeparator + ". Leiloes(l)"
			+ lineSeparator + ". Pesquisar Produtos(p)" + lineSeparator
			+ ". Deslogar(d)";

	private final String menu_01_2 = "uma opcao: (digite as primeiras letras)";

	private FachadaLogica fachadaLogica;

	private String userLogin;

	public MenuUser(FachadaLogica fachadaLogica, String userLogin) {
		this.fachadaLogica = fachadaLogica;
		this.userLogin = userLogin;
	}

	public void telaDeUserOpt() throws UserNotAuthenticatedException {
		String cmd;
		while (true) {
			System.out.println("User Session, Bem Vindo "
					+ fachadaLogica.getUserAttribute(userLogin, "name")
							.toUpperCase());
			if (userLogin.equals("admin")) {
				System.out.println(menuUserStringAdmin);
			} else {
				System.out.println(menuUserString);
			}

			cmd = stringReader(menu_01_2);

			if (cmd.toLowerCase().startsWith("a")) {
				try {
					new MenuAtualizaUser(fachadaLogica, userLogin)
							.telaDeAtualizarUser();
				} catch (Exception e) {
					System.out
							.println("Atualizacao indisponivel, tente novamente.");
				}
				;

			} else if (cmd.toLowerCase().startsWith("cad")) {
				try {
					new MenuCadastrarProduct(userLogin, this, fachadaLogica)
							.telaDeCadastrarProduto();
				} catch (CategoryDoesNotExistException e) {
					System.out
							.println("Cadastrar produtos esta indisponivel no momento, tente mais tarde");
				}

			} else if (cmd.toLowerCase().startsWith("v")) {
				try {
					new MenuVisualizaUserProdutos(fachadaLogica, userLogin)
							.telaDeVisualizaUserProducts();
				} catch (Exception e) {
					System.out
							.println("nao foi possivel visualizar produtos, tente novamente.");
				}

			} else if (cmd.toLowerCase().startsWith("e")) {

				try {
					if(fachadaLogica.findIdsProductByOwner(userLogin).isEmpty()){
						System.out.println("Nao ha mais produtos");
						continue;
					}
					new MenuDeletaUserProdutos(fachadaLogica, this, userLogin)
							.deleta();
				} catch (Exception e) {

					System.out
							.println("Deletar produto nao esta disponivel no momento, tente novamente.");
				}
			} else if (cmd.toLowerCase().startsWith("l")) {
				new MenuLeilao(fachadaLogica, userLogin).startLeilao();

			} else if (cmd.toLowerCase().startsWith("p")) {
				new MenuPesquisaProdutos(fachadaLogica, userLogin)
						.menuPesquisa();
			} else if (cmd.toLowerCase().startsWith("d")) {
				try {
					callLogof();
				} catch (UserNotAuthenticatedException e) {

					System.out
							.println("Entrada invalida, favor repetir com entrada valida");
					continue;
				}
				break;

			} else if (cmd.toLowerCase().startsWith("cat")
					&& (userLogin.equals("admin"))) {
				new MenuCategorias(fachadaLogica, userLogin).menuCategorias();

			} else {
				System.out
						.println("Entrada invalida, favor repetir com entrada valida");
			}
		}
	}

	public void callLogof() throws UserNotAuthenticatedException {
		fachadaLogica.doLogout(userLogin);
		new MenuPrincipal().inicia();
	}
}
